对于K-Means算法想必做机器学习和数据挖掘的广大同胞们已经不再陌生,做为数据挖据的十大经典算法之一,k-Means做聚类分析上有得天独厚的优势。对于其原理进行简单的描述:
k-Means算法是典型的基于距离的聚类算法,采用的是距离作为相似性指标。经过n次迭代后,当中心的位置不在发生变换的时候即是收敛完成。
算法:
1. 从n个文档中随机的选择出k个文档作为质心
2.从剩余的文档中测量出每个文档到质心的距离,并归类到最小质心的一类中
3. 重新计算质心的位置
4.重复2-3步,直到迭代完成。
由以上步骤,可以有java实现K-Means算法。随机产生100个点,设置k=5后进行聚类操作:
1.主函数:
package KMeans;
import java.util.ArrayList;
/**
* K-Means算法
* @author Administrator
*
*/
public class k_means {
/**
* @param args
*/
public static void main(String[] args) {
//1.创建二维数组 10x10的数组
int num_1[]=new int[100];
int num_2[]=new int[100];
//随机赋值
for(int i=0;i<100;i++){
num_1[i]=(int)( Math.random()*100);
}
for(int i=0;i<100;i++){
num_2[i]=(int)( Math.random()*100);
}
// 2.创建点坐标
ArrayList<pointBean> list=new ArrayList<pointBean>();
pointBean bean;
for(int i=0;i<100;i++){
bean=new pointBean();
bean.point_x=num_1[i];
bean.point_y